
'ASP:允许/屏蔽外地IP段的函数代码
'Author：flymorn Source：Flymorn关于如何获取IP138的IP数据地址信息，大家可以看飘易站内的这篇文章。

'屏蔽外地IP的功能。飘易这里就贴出ASP版本的屏蔽/允许外地IP的函数代码：
Dim ip1
'==========需要屏蔽的IP段，多个以|分割
'==========可以自行添加IP或IP段,如123.12.11.*屏蔽的范围是123.12.11.1-123.12.11.255
ip1 = "123.12.11.*|112.23.*.*|120.177.237.160"

''===========下面的函数请不要修改========
''获取IP函数Start
Function ipw()
	Dim ipw1
	ipw1 = Request.ServerVariables("REMOTE_ADDR")

	If Request.ServerVariables("HTTP_X_FORWARDED_FOR") <> "" Then
		ipw1 = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
	End If

	ipw = ipw1
End Function

''获取IP函数End
Function ipwint(n) '取IP4地址的前几段
	Dim ipw2
	Dim ipw3
	If n > 4 Then n = 4
	ipw2 = Split(ipw(),".")
	ipw3 = ""

	For i = 0 To n - 1
		ipw3 = ipw3 & ipw2(i)
	Next

	ipwint = ipw3
End Function

'取ip的前2、3、4位
Dim ipu2
Dim ipu3
Dim ipu4
ipu2 = ipwint(2)
ipu3 = ipwint(3)
ipu4 = ipwint(4)

Dim ip11
Dim ip12
Dim ip13
Dim x
Dim noip
noip = 0
ip11 = Split(ip1,"|")

For i = LBound(ip11) To UBound(ip11) '外循环
	ip12 = Split(ip11(i),".")
	ip13 = ""
	x    = 0

	For p = 0 To UBound(ip12)  '具体的iP

		If ip12(p) <> "*" Then
			ip13 = ip13 & ip12(p) '中间变量
			x    = x + 1
		Else
			Exit For
		End If

	Next

	'判断取几位

	Select Case x
		Case 2

			If InStr(ip13,ipu2) > 0 Then
				noip = 1
				Exit For
			End If

		Case 3

			If InStr(ip13,ipu3) > 0 Then
				noip = 1
				Exit For
			End If

		Case 4

			If InStr(ip13,ipu4) > 0 Then
				noip = 1
				Exit For
			End If

	End Select

Next

If noip = 1 Then
	Response.Write "<br><br><center><h3> 非常抱歉，飘易系统检测您的IP段属于被限制范围。<br><br><a href=http://www.piaoyi.org>返回</a>.& lt;/h3></center> "
	Response.End
End If
'-----------------------------------------------------------------

'如何防止网站内容被采集？
'    采集的弊端非常大，但作为我们网站主，如何防止自己的网站被别人采集呢？flymorn这里就提供几个建议，希望和大家一起探讨。

'1、网站内容采用多套模板，随机模板，给采集程序设置过高的门槛；但这招对整站采集器不起作用。

'2、网站内容里随机插入本网站的版权，如域名，网站名称，网站主人，而这些标识可以分开来写，或中间加短横-，或换成全角字符，防止被自动过滤，例如www.piaoｙｉ.org等。

'3、给我们网站里的图片打上自己的logo标识，比如在图片的右下角打上网站的名称+域名；采集者把我们的网站的图片采集过去，不可能一张一张图片都ps；所以，他们采集我们的网站内容，等于变相地帮助我们宣传网站。当然，如果你的网站文章中有图片，那么请记得一定要打上自己的LOGO，而且这个LOGO不要固定在这些图片的某个角落里，一定要随机出现在图片的任意位置，做到神出鬼没，让采集者感慨：对方网站站标真是变幻莫测，防不胜防啊……

'防采集：在文章中随机插入网站版权文字
'Author：Flymorn Source：飘易博客
'Categories：Asp编程 PostTime：2008-8-6 22:38:53
'正 文：  '这几天比较烦，网站不断被人抄袭采集，在百度对采集网站还没有有效的打击下，我们不能指望百度可以识别这些采集网站，那么只能依靠我们自己给我们辛辛苦苦做的内容加上版权文字，以打击这种不劳而获的采集行为。前阵子，我也写过一篇防采集的文章《如何防止网站内容被采集？》，其中有些方法不免极端化了，也是不得已而为之。今天，飘易就从另外的一个角度谈谈如何保护自己的内容，即使别人采集了，也要免费帮我们打广告。切入正题。我们怎么才能在自己的文章中随机插入版权文字呢？昨晚花了点时间，写了段简单的随机插入随机的文字的代码，asp版本的：
    
''===随机生成干扰文字函数开始===
''===随机生成干扰文字函数一===
Function rndk()
	Dim s
	Dim s1
	Dim n
	Dim n1
	''随机插入你的网站版权文字，多个以|分割
	s    = " 来自:飘易博客。|飘易:http://www.piaoyi.org。|http: //www.piaoyi.org。|ＰＩＡＯＹＩ．ＯＲＧ。|<font style=display:none>http: //www.ijuqing.com</font>|<span style=""display:none""><a href=http://www.piaoyi.org>piaoyi</a></span>"
	s1   = Split(s,"|")
	Randomize
	n    = Int((UBound(s1) - LBound(s1) + 1) * Rnd + LBound(s1))
	Randomize
	n1   = Int((10 - 1 + 1) * Rnd + 1)
	If n1 <= 3 Then '30%概率出现
	rndk = s1(n)
Else
	rndk = ""
End If

End Function

''===随机生成干扰文字函数二===
Function transtr(str) '调用该函数转化
Dim str1
Dim i
Dim k
k    = "<p></p>" '分割关键字
str1 = Split(str,k)

For i = LBound(str1) To UBound(str1)
	transtr = transtr & str1(i) & rndk() & k
Next

End Function

''===随机生成干扰文字函数结束===
'在具体调用的时候，比如我们的内容字段content，用上面的函数转换一下就ok了，像transtr(content)这样就行了。我这里取的分割关键字是段落结束之前的<p></p>，你也可以改成其他如<br>换行等，如果你的字段没有经过UBB转化，那么换行回车符号为 CHR(10) & CHR(10)，分割关键字改成它就可以了。
'我们网站的内容虽然不能说百分百是原创，但也是我们一篇篇辛辛苦苦地整理出来的啊，别人通过程序几个小时就能把你几个月甚至几年的心血就偷窃过去了，放到谁身上也不舒心啊。
'所以，飘易放出这样的随机插入版权的代码，希望能遏制部分这些采集者的嚣张气焰。

'--------------------
'4月27日
'检测是否本地提交数据 遇到http_referer问题
'先是一段VBS代码：
'******************************
'名称: ChkPost
'参数:NULL
'返回值：True/False
'创建时间:2005年5月5日
'作用:检查被提交的数据来源
'******************************
Function ChkPost()
 Dim Server_v1,Server_v2
 ChkPost=False
 Server_v1=Request.ServerVariables("HTTP_REFERER")
 Server_v2=CStr(Request.ServerVariables("SERVER_NAME"))
 response.write ("HTTP_REFERER"+Server_v1+"<br>")
 response.write ("SERVER_NAME"+Server_v2)
 If Mid(Server_v1,8,Len(Server_v2))=Server_v2 Then ChkPost=True
End Function
'做测试的时候FAIL 上网search一下
'原来http_referer是有奥妙的：（转贴如下）
'下列情况是从浏览器的地址栏正常取得Request.ServerVariables("HTTP_REFERER")的:
'   1.直接用<a href>
'   2.用Submit或<input type=image>提交的表单(POST or GET)
'  3.使用Jscript提交的表单(POST or GET)

'下面我们再看看Request.ServerVariables("HTTP_REFERER")不能正常取值的情况:
'   1.从收藏夹链接
'   2.单击'主页'或者自定义的地址
'   3.利用Jscript的location.href or location.replace()
'   4.在浏览器直接输入地址
'   5.<%Response.Redirect%>
'   6.<%Response.AddHeader%>或<meta http-equiv=refresh>转向
'   7.用XML加载地址

'显然，Request.ServerVariables("HTTP_REFERER")在多数情况下是不能正常工作的，下面我们看一个例子:
'   ref.asp
'    <%
'   response.write "You came from: " & request.servervariables("http_referer")
'   %>

'    ref.htm
'   <%
'        Response.AddHeader "Refresh", "10;URL=ref.asp"
'    %> 

'   <meta http-equiv='refresh' content='10;URL=ref.asp'> 

'   <form method=GET action=ref.asp name=getform> 
'    <input type=submit value=' Go there (GET) >> '> 
'   <input type=image style='cursor:hand'> 
'    </form><p> 
'看看上面的代码会得到什么的结果.
'    <form method=POST action=ref.asp name=postform> 
'    <input type=submit value=' Go there (POST) >> '> 
'   <input type=image style='cursor:hand'> 
'    </form><p> 

'   <a href='ref.asp'>直接链接<p> 

'    <a href='#' onclick='window.location.href="ref.asp";return false;'>javascript location</a> 

'   <a href='#'onclick='window.location.replace("ref.asp");return false;'>javascript replace</a> 

'   <a href='#' onclick='document.getform.submit();return false;'>javascript GET</a> 

'   <a href='#' onclick='document.postform.submit();return false;'>javascript POST </a>